package com.srcptit.java.training.kienbd.btvn1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.StringTokenizer;

class myEx4 extends Exception{}
public class Bai10DemSonguyento {
    public static void main(String[] args) throws IOException {
            // Sử dụng Buffered đọc file.
            BufferedReader bufr = new BufferedReader(new FileReader("data10.txt")); 
            
            // Kiểm tra ngoại lệ.  
            try {
                // Kiểm tra file trống.
                if( bufr.ready()==false )    throw new myEx1();// Bắt lỗi file trống 
                
                // Đọc dữ liệu từ file.
                String dataout = bufr.readLine();
                // Kiểm tra Xâu rỗng.
                if( dataout==null )  throw new myEx2();//Bắt lỗi xâu rỗng.
                
                if( DemSoNguyenTo(dataout)==false ) throw new myEx4();
                
                // Kết thúc đọc file.
                bufr.close();
            }catch(myEx1 e){
                System.out.println("Error! File is Empty.");
            }catch(myEx2 e){
                System.out.println("Error! String is empty.");
            }catch(myEx4 e){
                System.out.println("Error! Input again, please.");
            }                                            
    }
    static boolean TestSonguyento(long n){
            if( n<2 || n%2==0 ) return false;
            for(int i=2; i<=Math.sqrt(n); i++){
                if( n%i==0 )    return false;
            }return true;
    }
    static boolean DemSoNguyenTo(String newString) throws IOException{
            // Sử dụng Buffered đọc file.
            BufferedWriter bufw = new BufferedWriter(new FileWriter("data10.txt")); 
            
            // Use StringTokenizer.
            StringTokenizer stk = new StringTokenizer(newString," ",false);
            int n; 
            long dem = 0;// Số nguyên tố có trong file.
            String str;// Xâu con của stk. 
            while(stk.hasMoreTokens()){
                str = stk.nextToken();
                // Kiểm tra ngoại lệ
                try{
                    // Ép kiểu String -> int
                    n = Integer.parseInt(str);
                    
                    if( n<0 || n>999999999 )  throw new ArithmeticException();
                }catch(NumberFormatException e){
                    return false;
                }catch(ArithmeticException e){
                    return false;
                }
                if( TestSonguyento(n)==true ) dem++;
            }
            // Ghi kết quả vào file.
            bufw.write("File has "+dem+" primes number.");
            return true;
    }
}